Skip to content

fix(sdk): inline iobuf into iggy_binary_protocol#3110

Merged
numinnex merged 2 commits intomasterfrom
iobuf-release
Apr 13, 2026
Merged

fix(sdk): inline iobuf into iggy_binary_protocol#3110
numinnex merged 2 commits intomasterfrom
iobuf-release

Conversation

@hubcio
Copy link
Copy Markdown
Contributor

@hubcio hubcio commented Apr 13, 2026

0.8.0 rc1 passed both PPMC and IPMC votes, then cargo publish
revealed the iobuf crate could not reach crates.io: the name
"iobuf" is already owned by an unrelated v5.8.1 crate.

Publishing the workspace copy under a new name (iggy_iobuf) was
rejected because it would commit the project to SemVer stability
on ~485 LoC of refcounted unsafe code with zero tests, zero docs,
and a latent refcount-underflow UAF masked by debug_assert!.

Move core/iobuf/src/lib.rs verbatim into
core/binary_protocol/src/consensus/iobuf.rs, delete the standalone
crate, and update every consumer to import through
iggy_binary_protocol::consensus::iobuf. The implementation is
byte-for-byte unchanged; the existing lint debt is suppressed at
the module declaration and tracked for a 0.9.x cleanup pass.

Also close the SemVer leak:
iobuf types were reachable through iggy_common's public API via
FrozenBatchHeader and a pub use send_messages2::* wildcard
re-export. Demote FrozenBatchHeader to pub(crate), drop the
wildcard (no external consumers relied on it), and seal
FragmentedBacking so downstream crates cannot implement it and
pull Frozen<MESSAGE_ALIGN> into their own signatures.

The publish chain drops from 5 crates to 4:
iggy_binary_protocol -> iggy_common -> iggy -> iggy-cli.

spetz
spetz previously approved these changes Apr 13, 2026
numinnex
numinnex previously approved these changes Apr 13, 2026
@codecov
Copy link
Copy Markdown

codecov bot commented Apr 13, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 72.76%. Comparing base (5a2939a) to head (1612fd3).
⚠️ Report is 1 commits behind head on master.

Additional details and impacted files
@@            Coverage Diff            @@
##             master    #3110   +/-   ##
=========================================
  Coverage     72.76%   72.76%           
  Complexity      943      943           
=========================================
  Files          1117     1117           
  Lines         96342    96343    +1     
  Branches      73542    73561   +19     
=========================================
+ Hits          70102    70105    +3     
+ Misses        23692    23674   -18     
- Partials       2548     2564   +16     
Components Coverage Δ
Rust Core 73.55% <100.00%> (+0.03%) ⬆️
Java SDK 62.30% <ø> (ø)
C# SDK 69.15% <ø> (-0.26%) ⬇️
Python SDK 81.43% <ø> (ø)
Node SDK 91.40% <ø> (-0.13%) ⬇️
Go SDK 38.97% <ø> (ø)
Files with missing lines Coverage Δ
core/binary_protocol/src/consensus/iobuf.rs 23.50% <ø> (ø)
core/binary_protocol/src/consensus/message.rs 49.45% <ø> (ø)
core/common/src/types/send_messages2.rs 44.32% <ø> (ø)
core/consensus/src/plane_helpers.rs 86.36% <ø> (ø)
core/journal/src/prepare_journal.rs 82.77% <ø> (ø)
core/metadata/src/impls/recovery.rs 70.63% <ø> (ø)
core/partitions/src/iggy_partitions.rs 31.67% <ø> (ø)
core/partitions/src/journal.rs 18.43% <ø> (ø)
core/partitions/src/lib.rs 0.00% <ø> (ø)
core/partitions/src/messages_writer.rs 0.00% <ø> (ø)
... and 4 more

... and 19 files with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

hubcio added 2 commits April 13, 2026 17:29
0.8.0 rc1 passed both PPMC and IPMC votes, then cargo publish
revealed the iobuf crate could not reach crates.io: the name
"iobuf" is already owned by an unrelated v5.8.1 crate, so adding
a version field would have turned any downstream `cargo add
iggy_common` into a supply-chain hazard resolving the foreign
crate transitively.

Publishing the workspace copy under a new name (iggy_iobuf) was
rejected because it would commit the project to SemVer stability
on ~485 LoC of refcounted unsafe code with zero tests, zero docs,
and a latent refcount-underflow UAF masked by debug_assert!.

Move core/iobuf/src/lib.rs verbatim into
core/binary_protocol/src/consensus/iobuf.rs, delete the standalone
crate, and update every consumer to import through
iggy_binary_protocol::consensus::iobuf. The implementation is
byte-for-byte unchanged; the existing lint debt is suppressed at
the module declaration and tracked for a 0.9.x cleanup pass.

Also close the SemVer leak:
iobuf types were reachable through iggy_common's public API via
FrozenBatchHeader and a `pub use send_messages2::*` wildcard
re-export. Demote FrozenBatchHeader to pub(crate), drop the
wildcard (no external consumers relied on it), and seal
FragmentedBacking so downstream crates cannot implement it and
pull Frozen<MESSAGE_ALIGN> into their own signatures.

The publish chain drops from 5 crates to 4:
iggy_binary_protocol -> iggy_common -> iggy -> iggy-cli.
…onent

paste -sd ' | ' treats the delimiter argument as a list of
single characters to cycle through (space, pipe, space),
producing alternating separators instead of the intended
' | ' between every package. The result was expressions like
`package(a) package(b)|package(c)` which nextest rejects
with "expected end of expression" (exit 94).

Fix by joining with a single '|' delimiter then substituting
with ' | ' via sed, which produces valid filterset syntax
throughout.

The rust-iobuf component is removed from components.yml -
iobuf was inlined into iggy_binary_protocol in the preceding
commit, so the path and all depends_on references are stale.
@hubcio hubcio dismissed stale reviews from spetz and numinnex via 1612fd3 April 13, 2026 15:46
@numinnex numinnex merged commit d4cdfca into master Apr 13, 2026
141 of 146 checks passed
@numinnex numinnex deleted the iobuf-release branch April 13, 2026 16:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants